package dao.impl;

import java.util.List;

import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;

import dao.AccountDAO;
import domain.Account;

/**
 * 账目Dao实现类.
 * <p>
 * 创建日期：2010-07-01<br>
 * 创建人：Xiyt<br>
 * 修改日期：<br>
 * 修改人：<br>
 * 修改内容：<br>
 * 
 * @author Xiyt
 * @version 1.0
 */
public class AccountDAOImpl extends SqlMapClientDaoSupport implements AccountDAO {

	 /**
     * 构造方法
     * @author xiyt
     */
    public AccountDAOImpl() {
        super();
    }
    
    /**
     * 根据主键查询对象
     * @param account 对象
     * @author xiyt
     */
    public Account selectByPrimaryKey(int id) {
        Account record = (Account) getSqlMapClientTemplate().queryForObject("an_account.selectByPrimaryKey", id);
        return record;
    }
    
    /**
     * 根据条件查询对象列表
     * @param account 对象
     * @author xiyt
     */
    @SuppressWarnings("unchecked")
	public List<Account> selectByCriteria(Account account){
    	List<Account> list = (List<Account>)getSqlMapClientTemplate().queryForList("an_account.selectByCriteria", account);
        return list;
    }
    
    
    /**
     * 根据条件查询对象列表
     * @param account 对象
     * @param start 开始行号
     * @param limit 每次查询行数
     * @author xiyt
     */
    @SuppressWarnings("unchecked")
	public List<Account> selectByCriteriaForPaging(Account account, int start, int limit){
    	List<Account> list = (List<Account>)getSqlMapClientTemplate().queryForList("an_account.selectByCriteria", account, start, limit);
        return list;
    }
    
    /**
     * 根据条件查询对象个数
     * @param account 查询条件对象
     * @author xiyt
     */
    public int countByCriteria(Account account){
    	Integer count = (Integer)  getSqlMapClientTemplate().queryForObject("an_account.countByCriteria", account);
        return count;
    }

    /**
     * 插入对象
     * @param account 对象
     * @author xiyt
     */
    public void insert(Account account){
    	getSqlMapClientTemplate().insert("an_account.insert", account);
    }

    /**
     * 根据条件更新对象
     * @param account 对象
     * @author xiyt
     */
    public int updateByPrimaryKey(Account account){
        int rows = getSqlMapClientTemplate().update("an_account.updateByPrimaryKey", account);
        return rows;
    }
    

    /**
     * 根据条件删除对象个数
     * @param account 查询条件对象
     * @author xiyt
     */
    public int deleteByPrimaryKey(int id){
    	int rows = getSqlMapClientTemplate().delete("an_account.deleteByPrimaryKey", id);
        return rows;
    }
    
    
    /**
     * 查询总合计值
     * @param account 查询条件对象
     * @author xiyt
     */
    public double selectSumByCriteria(Account account){
    	Double sum = (Double)  getSqlMapClientTemplate().queryForObject("an_account.selectSumByCriteria", account);
    	if(null!=sum){
    		return sum;
    	}else{
    		return 0;
    	}
    }
    
    /**
     * 分组查询收入合计或支出合计
     * @param account 查询条件对象
     * @author xiyt
     */
    @SuppressWarnings("unchecked")
	public List<Account> selectGroupSumByCriteria(Account account){
    	List<Account> list = (List<Account>)getSqlMapClientTemplate().queryForList("an_account.selectByCriteria", account);
        return list;
    }
}